﻿Ext.ns('suce.upload');

suce.upload.downloadVUCE = function (folder, fn) {
    if (!fn) return;
    var lp = fn.lastIndexOf('.'),
        ext = lp !== -1 ? fn.substring(lp + 1) : '';

    var url = 'download.ashx?' + Ext.urlEncode({ folder: folder, file: fn, t: (new Date().getTime()) }),
        el = document.getElementById('_iframedownloader_');
    if (!el) {
        el = document.createElement('iframe');
        el.id = '_iframedownloader_';
        el.name = '_iframedownloader_';
        el.className = 'x-hidden';
        document.body.appendChild(el);
    }
    if (ext && ['pdf', 'txt', 'jpg', 'gif', 'tiff', 'png', 'jpeg'].indexOf(ext.toLowerCase()) !== -1)
        MyApp.openWindow(url);
    else
        el.src = url;
};
/*
suce.upload.downloadUpload = function (numesolicitud, folder, fn) {
    if (!fn) return;
    var lp = fn.lastIndexOf('.'),
        ext = lp !== -1 ? fn.substring(lp + 1) : '',
        url = Ext.String.format('upload/upload/{0}/{1}/{2}?t={3}', numesolicitud, folder, fn, (new Date().getTime())),
        el = document.getElementById('_iframedownloader_');
    if (!el) {
        el = document.createElement('iframe');
        el.id = '_iframedownloader_';
        el.name = '_iframedownloader_';
        el.className = 'x-hidden';
        document.body.appendChild(el);
    }
    if (ext && ['pdf', 'txt', 'jpg', 'gif', 'tiff', 'png', 'jpeg'].indexOf(ext.toLowerCase()) !== -1)
        MyApp.openWindow(url);
    else
        el.src = url;
};
*/
Ext.define('suce.upload.Grid', {

    extend: 'Ext.grid.Panel',

    title: 'Archivos',

    multiSelect: true,

    numesolicitud: null,    // parámetro
    idsolicitud: null,      // Parámetro
    idversion: null,        // Parámetro
    folder: null,           // parámetro
    readOnly: null,

    initComponent: function () {
        var me = this;

        me.store = STORE('solicitud.ashx', { C: 'ADJUNTOS', S: 'GETLIST', idsolicitud: me.idsolicitud, idversion: me.idversion });
        me.columns = COLMODEL([
                    {
                        xtype: 'actioncolumn',
                        width: 20,
                        items: [{
                            iconCls: 'tb-file',
                            handler: function (grid, rowIndex, colIndex) {
                                var r = grid.store.getAt(rowIndex);
                                me.download(r.data.filename);
                            },
                            getClass: function (v, md, r) {
                                var lp, ext;
                                if (r.data.filename !== undefined)
                                    lp = r.data.filename.lastIndexOf('.');
                                else
                                    lp = -1;
                                ext = lp !== -1 ? r.data.filename.substring(lp + 1) : undefined;
                                return ext ? 'tb-' + ext.toLowerCase() : '';
                            }
                        }]
                    },
                    ['filename', 'Archivo', 0.1],
                    ['obsadjunto', 'Observación', 0.1, {
                        align: 'right',
                        editor: TEXT('', '', 200, { value: '' }),
                        renderer: function (v, m, r) {
                            var pal;
                            if (v === undefined)
                                pal = '';
                            if (v !== null && v !== '' && v !== undefined)
                                pal = v;
                            r.data.obsadjunto = pal;
                            return pal;
                        }
                    }]
                ], { sortable: true });
        if (me.readOnly !== true) {
            me.tbar = [
                    { text: 'Adjuntar Archivo', scope: me, handler: me.adjuntar, iconCls: 'tb-txt' },
                    { text: 'Eliminar Archivo', scope: me, handler: me.adjuntoEliminar },
                    { text: 'Guardar Obs', scope: me, handler: me.obs }
                ];
        }
        me.plugins = Ext.create('Ext.grid.plugin.CellEditing', {
            clicksToEdit: 2
        });

        me.tbar = me.tbar || [];
        me.tbar.push({ text: 'Ver', scope: me, handler: me.comparar });
        me.callParent();
    },

    adjuntar: function () {
        var me = this,
            w = suce.upload.form({ folder: me.folder, numesolicitud: me.numesolicitud });
        w.on('upload', function (v) {
            me.store.load({ params: { folder: me.folder, numesolicitud: me.numesolicitud} });
        });
        w.show();
    },

    setParameters: function (p) {
        var me = this;
        me.folder = p.folder;
        me.numesolicitud = p.numesolicitud;
    },

    adjuntoEliminar: function () {
        var me = this,
            r = GETSELECTED(me);
        if (!r) return;
        callServer('upload.ashx', { C: 'DELETE', numesolicitud: me.numesolicitud, folder: me.folder, filename: r.data.filename }, function (v) {
            me.store.load();
        }, me);
    },

    download: function (fn) {
        var me = this;
        suce.upload.downloadVUCE(me.numesolicitud + (me.folder ? '/' + me.folder : ''), fn);
    },

    comparar: function () {
        var me = this,
            rs = GETSELECTED(me, true),
            params = { numesolicitud: me.numesolicitud, t: (new Date().getTime()) };
        if (!rs) return;
        for (var i = 0; i < rs.length; i++) {
            params['f' + String(i + 1)] = rs[i].data.filename;
        }
        MyApp.openWindow('view.html#' + Ext.urlEncode(params), '_new');
    },

    obs: function () {
        var me = this,
                p = Ext.apply({ C: 'ADJUNTOS', S: 'INSERTOBS', idsolicitud: me.idsolicitud, idversion: me.idversion }),
                obs = [];
        me.store.each(function (r) {
            var d = r.data;
            if (d.obsadjunto !== null && d.obsadjunto !== '' && d.obsadjunto !== undefined)
                obs.push([d.filename, d.obsadjunto].join(']]'));
        });
        p.obs = obs.join('<->');
        if (!ISVALID(me.form)) return;
        postServer('solicitud.ashx', { C: 'ADJUNTOS', S: 'INSERTOBS', idsolicitud: me.idsolicitud, idversion: me.idversion }, function (v) {
            Ext.Msg.Message('Observaciones guardadas.');
        }, me);
    }


});

suce.upload.form = function (config) {

    return new Ext.Window(Ext.apply({

        title: 'Adjuntar archivo',
        layout: 'fit',
        width: 500,
        height: 140,

        folder: null,           // parámetro
        numesolicitud: null,    // parámetro
        idsolicitud: null,      // Parámetro
        idversion: null,        // Parámetro

        initComponent: function () {
            var me = this,
                form;

            me.addEvents('upload');

            me.bbar = ['->',
                { text: '<b>Aceptar</b>', handler: me.ok, scope: me, iconCls: 'tb-ok' },
                { text: 'Cancelar', handler: me.onEsc, scope: me, iconCls: 'tb-exit' }
            ];

            form = new Ext.form.Panel({
                baseCls: 'x-plain',
                bodyPadding: 10,
                height: 130,
                region: 'center',
                fieldDefaults: { labelWidth: 100 },
                items: [
                    HIDDEN('folder', me.folder),
                    HIDDEN('numesolicitud', me.numesolicitud),
                    HIDDEN('idsolicitud', me.idsolicitud),
                    HIDDEN('idversion', me.idversion),
                    {
                        xtype: 'filefield',
                        name: 'filename',
                        fieldLabel: 'Archivo 1',
                        labelWidth: 80,
                        msgTarget: 'side',
                        allowBlank: false,
                        anchor: '100%',
                        buttonText: 'Seleccionar...'
                    }, {
                        xtype: 'filefield',
                        name: 'filename2',
                        fieldLabel: 'Archivo 2',
                        labelWidth: 80,
                        msgTarget: 'side',
                        anchor: '100%',
                        buttonText: 'Seleccionar...'
                    }
                ]
            });

            me.items = [form];

            Ext.Window.prototype.initComponent.call(me);

            me.form = form.form;
        },

        ok: function () {
            var me = this,
                p = Ext.apply({ C: 'ADJUNTOS', S: 'INSERT', filename1: me.form.ff('filename').getValue(), filename2: me.form.ff('filename2').getValue() }, me.form.getValues());
            if (me.form.isValid()) {
                me.form.submit({
                    url: 'upload.ashx',
                    waitMsg: 'Subiendo archivo...',
                    success: function (fp, o) {
                        Ext.Msg.message('Archivo subido');
                        postServer('solicitud.ashx', p);
                        me.fireEvent('upload', me, me.form.getValues());
                        me.onEsc();
                    },
                    failure: function () {
                        Ext.Msg.message('Error al subir archivo muy grande');
                    }
                });
            }
        }

    }, config));
};

Ext.define('suce.upload.Grid2', {

    extend: 'Ext.grid.Panel',

    title: 'Archivos',

    multiSelect: true,

    numesolicitud: null,    // parámetro
    folder: '',           // parámetro
    readOnly: false,

    initComponent: function () {
        var me = this;
        me.store = STORE('upload.ashx', { C: 'GETFILES', numesolicitud: me.numesolicitud, folder: me.folder }, 'filename');
        me.columns = COLMODEL([
                    {
                        xtype: 'actioncolumn',
                        width: 20,
                        items: [{
                            iconCls: 'tb-file',
                            handler: function (grid, rowIndex, colIndex) {
                                var r = grid.store.getAt(rowIndex);
                                me.download(r.data.filename);
                            },
                            getClass: function (v, md, r) {
                                var lp = r.data.filename.lastIndexOf('.'),
                                    ext = lp !== -1 ? r.data.filename.substring(lp + 1) : undefined;
                                return ext ? 'tb-' + ext.toLowerCase() : '';
                            }
                        }]
                    },
                    ['filename', 'Archivo', 0.1]
                ], { sortable: true });
        if (me.readOnly !== true) {
            me.tbar = [
                { text: 'Adjuntar Archivo', scope: me, handler: me.adjuntar, iconCls: 'tb-txt' },
                { text: 'Eliminar Archivo', scope: me, handler: me.adjuntoEliminar }
            ];
        }
        me.tbar = me.tbar || [];
        me.tbar.push({ text: 'Ver', scope: me, handler: me.comparar });

        me.callParent();
    },

    adjuntar: function () {
        var me = this,
            w = suce.upload.form2({ folder: me.folder, numesolicitud: me.numesolicitud });
        w.on('upload', function (v) {
            me.store.load({ params: { folder: me.folder, numesolicitud: me.numesolicitud} });
        });
        w.show();
    },

    setParameters: function (p) {
        var me = this;
        me.folder = p.folder;
        me.numesolicitud = p.numesolicitud;
    },

    adjuntoEliminar: function () {
        var me = this,
            r = GETSELECTED(me);
        if (!r) return;
        callServer('upload.ashx', { C: 'DELETE', numesolicitud: me.numesolicitud, folder: me.folder, filename: r.data.filename }, function (v) {
            me.store.load();
        }, me);
    },

    download: function (fn) {
        var me = this;
        if (!me.numesolicitud)
            suce.upload.downloadVUCE(me.folder, fn);
        else
            //suce.upload.downloadVUCE(me.numesolicitud + (me.folder ? '/' + me.folder : ''), fn);
            suce.upload.downloadVUCE(me.numesolicitud.substring(1,10) + '/' + me.numesolicitud + (me.folder ? '/' + me.folder : ''), fn);    //cb
            
    },

    comparar: function () {
        var me = this,
            rs = GETSELECTED(me, true),
            params = { numesolicitud: me.numesolicitud, t: (new Date().getTime()) };
        if (!rs) return;
        for (var i = 0; i < rs.length; i++) {
            params['f' + String(i + 1)] = rs[i].data.filename;
        }
        MyApp.openWindow('view.html#' + Ext.urlEncode(params), '_new');
    }


});

suce.upload.form2 = function (config) {

    return new Ext.Window(Ext.apply({

        title: 'Adjuntar archivo',
        layout: 'fit',
        width: 500,
        height: 140,

        folder: null,           // parámetro
        numesolicitud: null,    // parámetro

        initComponent: function () {
            var me = this,
                form;

            me.addEvents('upload');

            me.bbar = ['->',
                { text: '<b>Aceptar</b>', handler: me.ok, scope: me, iconCls: 'tb-ok' },
                { text: 'Cancelar', handler: me.onEsc, scope: me, iconCls: 'tb-exit' }
            ];

            form = new Ext.form.Panel({
                baseCls: 'x-plain',
                bodyPadding: 10,
                height: 130,
                region: 'center',
                fieldDefaults: { labelWidth: 100 },
                items: [
                    HIDDEN('folder', me.folder),
                    HIDDEN('numesolicitud', me.numesolicitud),
                    {
                        xtype: 'filefield',
                        name: 'filename',
                        fieldLabel: 'Archivo 1',
                        labelWidth: 80,
                        msgTarget: 'side',
                        allowBlank: false,
                        anchor: '100%',
                        buttonText: 'Seleccionar...'
                    }, {
                        xtype: 'filefield',
                        name: 'filename2',
                        fieldLabel: 'Archivo 2',
                        labelWidth: 80,
                        msgTarget: 'side',
                        anchor: '100%',
                        buttonText: 'Seleccionar...'
                    }
                ]
            });

            me.items = [form];

            Ext.Window.prototype.initComponent.call(me);

            me.form = form.form;
        },

        ok: function () {
            var me = this;
            if (me.form.isValid()) {
                me.form.submit({
                    url: 'upload.ashx',
                    waitMsg: 'Subiendo archivo...',
                    success: function (fp, o) {
                        Ext.Msg.message('Archivo subido');
                        me.fireEvent('upload', me, me.form.getValues());
                        me.onEsc();
                    },
                    failure: function () {
                        Ext.Msg.message('Error al subir archivo muy grande');
                    }
                });
            }
        }

    }, config));
};